package com.kyh.controller.api.sys;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.kyh.service.sys.ImgcodeService;
import com.kyh.sys.entity.Imgcode;
import com.kyh.sys.mapper.ImgcodeMapper;
import com.kyh.util.ReqUtil;

@Controller
public class ApiOuterImgcodeController {
    @Autowired
    private ImgcodeMapper imgcodeMapper;
    @Autowired
    private ImgcodeService imgcodeService;

	@RequestMapping("/api/outer/img/code")
	public void getImgcode(HttpServletRequest request, HttpServletResponse response)
			throws IOException {
		String imgcodeip = ReqUtil.getIpAddr(request);
		
		int width = 63;
		int height = 37;
		Random random = new Random();
		// 设置response头信息
		// 禁止缓存
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);

		// 生成缓冲区image类
		BufferedImage image = new BufferedImage(width, height, 1);
		// 产生image类的Graphics用于绘制操作
		Graphics graphics = image.getGraphics();
		// Graphics类的样式
		graphics.setColor(this.getRandColor(200, 250));
		graphics.setFont(new Font("Times New Roman", 0, 28));
		graphics.fillRect(0, 0, width, height);
		// 绘制干扰线
		for (int i = 0; i < 40; i++) {
			graphics.setColor(this.getRandColor(130, 200));
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int x1 = random.nextInt(12);
			int y1 = random.nextInt(12);
			graphics.drawLine(x, y, x + x1, y + y1);
		}

		// 绘制字符
		String imgcodevalue = "";
		for (int i = 0; i < 4; i++) {
			String rand = String.valueOf(random.nextInt(10));
			imgcodevalue = imgcodevalue + rand;
			graphics.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
			graphics.drawString(rand, 13 * i + 6, 28);
		}
		
		// 清除本IP的其它验证码
		imgcodeMapper.deleteByIp(imgcodeip);
		
		// 将验证码保存到数据库
		try {
			Imgcode imgcode = Imgcode.imgcode(
					imgcodeip,
					imgcodevalue,
					null
					);
			imgcodeService.add(imgcode);
		} catch (Exception e) {
			e.printStackTrace();
		}

		graphics.dispose();

		ImageIO.write(image, "JPEG", response.getOutputStream());
		response.getOutputStream().flush();
	}

	// 创建颜色
	Color getRandColor(int fc, int bc) {
		Random random = new Random();
		if (fc > 255)
			fc = 255;
		if (bc > 255)
			bc = 255;
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}
}